package com.whfc.fuum.dao;


import com.whfc.fuum.dto.SysRoleDTO;
import com.whfc.fuum.dto.SysRuleDTO;
import com.whfc.fuum.dto.SysUserDTO;
import com.whfc.fuum.entity.SysUserRole;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface SysUserRoleMapper {
    int deleteByPrimaryKey(Integer id);

    int insertSelective(SysUserRole record);

    SysUserRole selectByPrimaryKey(Integer id);

    int updateByPrimaryKeySelective(SysUserRole record);

    int updateByPrimaryKey(SysUserRole record);

    /**
     * 查询用户拥有的所有权限
     *
     * @param userId
     * @param platform
     * @return
     */
    List<SysRuleDTO> selectRuleListByUserId(@Param("userId") Integer userId,
                                            @Param("platform") Integer platform,
                                            @Param("deptId") Integer deptId);

    /**
     * 查询角色关联的用户
     *
     * @param roleId
     * @return
     */
    List<SysUserDTO> selectUserListByRoleId(@Param("roleId") Integer roleId);

    /**
     * 删除用户角色
     *
     * @param userId
     */
    void deleteByUserId(Integer userId);

    /**
     * 插入用户角色关联
     *
     * @param userId
     * @param roleId
     */
    void insertUserRole(@Param("userId") Integer userId, @Param("roleId") Integer roleId);

    /**
     * 批量插入用户角色
     *
     * @param deptId
     * @param userId
     * @param roleIds
     */
    void batchInsertUserRole(@Param("deptId") Integer deptId,
                             @Param("userId") Integer userId,
                             @Param("roleIds") List<Integer> roleIds);

    /**
     * 统计角色使用次数
     *
     * @param roleId
     * @return
     */
    int countByRoleId(@Param("roleId") Integer roleId);

    /**
     * 删除当前组织机构下面的所有用户角色
     *
     * @param deptId
     * @param userId
     */
    void delUserRoles(@Param("deptId") Integer deptId,
                      @Param("userId") Integer userId);

    /**
     * 根据用户ID和组织机构ID获取用户组织机构对应的角色
     *
     * @param userId
     * @param deptId
     * @return
     */
    List<SysRoleDTO> selectRoleListByUserIdAndDeptId(@Param("userId") Integer userId,
                                                     @Param("deptId") Integer deptId);

    /**
     * 拷贝用户权限
     *
     * @param userId
     * @param deptId
     * @param inviterUserId
     */
    void copyUserRuleBYDeptIdAndInviterUserId(@Param("userId") Integer userId,
                                              @Param("deptId") Integer deptId,
                                              @Param("inviterUserId") Integer inviterUserId);


    /**
     * 根据用户ID查找用户的角色ID列表
     *
     * @param userId 用户ID
     * @return 角色ID列表
     */
    List<Integer> selectRoleIdsByUserId(@Param("userId") Integer userId);


    /**
     * 根据组织机构ID和角色ID查找用户
     *
     * @param deptId  组织机构ID
     * @param roleIds 角色ID
     * @return 用户
     */
    List<SysUserDTO> selectUserListByRoleIdsAndDeptId(@Param("deptId") Integer deptId, @Param("roleIds") List<Integer> roleIds);

    /**
     * 根据角色ID列表查找用户ID列表
     *
     * @param roleIdList 角色ID列表
     * @return 用户ID列表
     */
    List<Integer> selectUserIdByRoleIds(@Param("roleIdList") List<Integer> roleIdList);
}